<?php
/**
 * Action Helper for finding days in a month
 */
class Home_Helper_DiaUtil extends Zend_Controller_Action_Helper_Abstract
{
	/**
	 * @var Zend_Loader_PluginLoader
	 */
	public $pluginLoader;

	/**
	 * Constructor: initialize plugin loader
	 *
	 * @return void
	 */
	public function __construct()
	{
		$this->pluginLoader = new Zend_Loader_PluginLoader();
	}

	/**
	 * Returns the number of days in a given month + year
	 *
	 * @param int $month
	 * @param int $year
	 * @return int
	 * @throws Exception
	 */
	public function getDiaUtil($month,$year)
	{
		return 'meu pau de óculos';
	}

	/**
	 * Strategy pattern: call helper as broker method
	 *
	 * @param  int $month
	 * @param  int $year
	 * @return int
	 */
	public function direct($month, $year)
	{
		return $this->diaUtil($month,$year);
	}
	
	function dias_feriados($ano = null,$filtro = null)
	{
		if ($ano === null)
		{
			$ano = intval(date('Y'));
		}
	
		$pascoa     = easter_date($ano); // Limite de 1970 ou após 2037 da easter_date PHP consulta http://www.php.net/manual/pt_BR/function.easter-date.php
		$dia_pascoa = date('j', $pascoa);
		$mes_pascoa = date('n', $pascoa);
		$ano_pascoa = date('Y', $pascoa);
	
		$feriados = array(
				// Tatas Fixas dos feriados Nacionail Basileiras
				mktime(0, 0, 0, 1,  1,   $ano), // Confraternização Universal - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 4,  21,  $ano), // Tiradentes - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 5,  1,   $ano), // Dia do Trabalhador - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 9,  7,   $ano), // Dia da Independência - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 10,  12, $ano), // N. S. Aparecida - Lei nº 6802, de 30/06/80
				mktime(0, 0, 0, 11,  2,  $ano), // Todos os santos - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 11, 15,  $ano), // Proclamação da republica - Lei nº 662, de 06/04/49
				mktime(0, 0, 0, 12, 25,  $ano), // Natal - Lei nº 662, de 06/04/49
	
				// These days have a date depending on easter
				mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 48,  $ano_pascoa),//2ºferia Carnaval
				mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 47,  $ano_pascoa),//3ºferia Carnaval
				mktime(0, 0, 0, $mes_pascoa, $dia_pascoa - 2 ,  $ano_pascoa),//6ºfeira Santa
				mktime(0, 0, 0, $mes_pascoa, $dia_pascoa     ,  $ano_pascoa),//Pascoa
				mktime(0, 0, 0, $mes_pascoa, $dia_pascoa + 60,  $ano_pascoa),//Corpus Cirist
		);
	
		sort($feriados);
		$saida = array();
		foreach($feriados as $a)
		{
			if($filtro)
			{
				$data_filtro = $this->data2banco(date('m',mktime(0,0,0,$filtro,01,$ano)));
				$data_foreach = $this->data2banco(date("m",$a));
				if($data_filtro == $data_foreach)
				{
					$saida[] = date("d-m-Y",$a);
				}
			}
			else $saida[] =  date("d-m-Y",$a);
		}
		return $saida;
	
	}
	
	public function data2banco ($d2b) {
	
		if(!empty($d2b)){
			$d2b_ano=substr($d2b,6,4);
			$d2b_mes=substr($d2b,3,2);
			$d2b_dia=substr($d2b,0,2);
			$d2b="$d2b_ano-$d2b_mes-$d2b_dia";
		}
		return $d2b;
	}
	
	public function banco2data($b2d) {
	
		if($b2d=="0000-00-00" or empty($b2d))
		{
			$b2d="";
			return $b2d;
		}
		else
		{
			$b2d_ano=substr($b2d,0,4);
			$b2d_mes=substr($b2d,5,2);
			$b2d_dia=substr($b2d,8,2);
			$b2d=$b2d_dia.'-'.$b2d_mes.'-'.$b2d_ano;
			return $b2d;
		}
	}
	
	public function diaUtil($mes,$ano)
	{
		$dia     = 1;
		$diaUtil = 1;
		$teste   = true;
	
		do {
	
			$diaSemana = date('w', mktime(0,0,0,$mes,$dia, $ano));
	
			if ($diaSemana != 0 && $diaSemana != 6) {
				if ($diaUtil < 5) {
					$diaUtil++;
				} else {
					break;
				}
			}
	
			$dia++;
	
		} while ($teste);
	
		$data = date('d-m-Y',mktime(0,0,0,$mes,$dia,$ano));
	
		$feriado = $this->dias_feriados($ano,$mes);
	
		$plus = 0;
		foreach($feriado as $i => $v)
		{
			$ts = strtotime ( $this->data2banco($v) );
			$dia_semana = date ( 'w', $ts );
			if($this->data2banco($data) >= $this->data2banco($v))
			{
				if(!($dia_semana == 6 || $dia_semana == 0))
				{
					$plus++;
				}
			}
		}
	
		$dia = $dia + $plus;
	
		$data = date('d-m-Y',mktime(0,0,0,$mes,$dia,$ano));
	
		return $data;
	
	
	}
	
	
	
}